package com.sun.managementsystemsimulationhomeworkcode.chapter2.arrive;

import java.util.Random;

/**
 * @author Haoran Sun
 * @since 2024/09/18
 */


public class Demo01 {

    /**
     * 测试一：生成100个单位工件的到达时间
     * @param args
     */
    public static void test01(String[] args) {
        // 平均到达时间，即λ的倒数
        double meanArrivalTime = 0.5;
        // λ参数
        double lambda = 1 / meanArrivalTime;

        Random random = new Random();

        // 生成一定数量的到达时间样本
        int sampleSize = 100;
        for (int i = 0; i < sampleSize; i++) {
            // 生成0到1之间的均匀分布随机数
            double uniformRandom = random.nextDouble();

            // 应用反变换法得到指数分布随机变量
            double exponentialRandom = -Math.log(1 - uniformRandom) / lambda;

            System.out.println("第 " + (i + 1) + " 个单位工件的到达时间: " + exponentialRandom + " 小时");
        }

    }

    /**
     * 测试二：生成到达时间，直到结束时间
     * @param args
     */
    public static void main(String[] args) {
        // 平均到达时间，即λ的倒数
        double meanArrivalTime = 0.5;
        // λ参数
        double lambda = 1 / meanArrivalTime;
        // 开始时间
        double startTime = 5;
        // 结束时间
        double endTime = 240;
        double currentTime = startTime;

        Random random = new Random();

        // 生成到达时间，直到达到结束时间
        while (currentTime < endTime) {
            // 生成0到1之间的均匀分布随机数
            double uniformRandom = random.nextDouble();

            // 应用反变换法得到指数分布随机变量
            double exponentialRandom = -Math.log(1 - uniformRandom) / lambda;

            // 更新当前时间
            currentTime += exponentialRandom;

            // 输出到达时间
            if (currentTime < endTime) {
                System.out.println("单位工件在 " + currentTime + " 小时到达");
            }
        }
    }


}
